﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;

public class Security
{
    String connectionString = ConfigurationManager.ConnectionStrings["canhbuomxanhconnectionstring"].ConnectionString;
    private Boolean isAdmin = false;

    /* Kiểm trả có phải Admin login rồi hay chưa, hàm trả về Boolean */
    public Boolean IsAdmin
    {
        get
        {
            if (HttpContext.Current.Session["username"] != null)
            {
                String role = HttpContext.Current.Session["username"].ToString();
                if (!role.ToLower().Equals("")) { isAdmin = true; }
            }                
            return isAdmin;
        }
    }

    /* Hảm trả về Boolean, Login thành công thì trả về true, thất bại trả về false.
     * Khi Login thành công thì tự động add Sesstion */
    public Boolean IsLoginAdmin(String username, String password)
    {
        String strCom = "exec [checkLogin] @username, @password";
        SqlConnection sqlCon = new SqlConnection(connectionString);
        SqlCommand sqlCom = new SqlCommand(strCom, sqlCon);
        sqlCom.Parameters.AddWithValue("@username", username);
        sqlCom.Parameters.AddWithValue("@password", password);
        try
        {
            sqlCon.Open();
            if (sqlCom.ExecuteScalar() != null)
            {
                HttpContext.Current.Session["username"] = username;
                HttpContext.Current.Session["pass"] = password;
                return true;
            }
            return false;
        }
        catch { return false; }
        finally { sqlCon.Close(); }
    }

    /* Hàm trả về true là đổi password thành công, false là đổi thất bại (do sai username hoặc password cũ bị sai) */
    public Boolean ChangePassword(String username, String oldPassword, String newPassword)
    {
        String strCom = "exec [changePassword] @username, @oldPassword, @newPassword";
        SqlConnection sqlCon = new SqlConnection(connectionString);
        SqlCommand sqlCom = new SqlCommand(strCom, sqlCon);
        sqlCom.Parameters.AddWithValue("@username", username);
        sqlCom.Parameters.AddWithValue("@oldPassword", oldPassword);
        sqlCom.Parameters.AddWithValue("@newpassword", newPassword);
        try
        {
            sqlCon.Open();
            if (sqlCom.ExecuteNonQuery() > 0)
            {                
                return true;
            }
            return false;
        }
        catch { return false; }
        finally { sqlCon.Close(); }
    }

    /* Hàm tạo mới admin, ở đây role nào cũng như role nào vì chỉ có 1 quyền admin 
     Tạo mới thành công thì hàm trả về giá trị TRUE, ngược lại FALSE
     * (Nguyên nhân do trùng khóa chính hoặc do hàm viết sai ^_^ thì FALSE)
     */
    public Boolean CreateAdmin(String username, String password, String email, String role)
    {
        String strCom = "exec [createUserLogin] @username, @password, @email, @role";
        SqlConnection sqlCon = new SqlConnection(connectionString);
        SqlCommand sqlCom = new SqlCommand(strCom, sqlCon);
        sqlCom.Parameters.AddWithValue("@username", username);
        sqlCom.Parameters.AddWithValue("@password", password);
        sqlCom.Parameters.AddWithValue("@email", email);
        sqlCom.Parameters.AddWithValue("@role", role);
        try
        {
            sqlCon.Open();
            if (sqlCom.ExecuteNonQuery() > 0)
            {
                return true;
            }
            return false;
        }
        catch { return false; }
        finally { sqlCon.Close(); }
    }

    /* Hàm logout user hoặc admin */
    public static void Logout()
    {
        HttpContext.Current.Session["username"] = null;
        HttpContext.Current.Session["pass"] = null;
    }
}